//
//  TSCVCCustomerWantBuyC.m
//  Tsc_IOS
//
//  Created by Rio on 15-10-15.
//  Copyright (c) 2015年 idream. All rights reserved.
//
// TODO _llGoodsPicList下方有一个10.0f高度的bottom，这个应该使用vacancy代替
// TODO 在“商品描述”中打开键盘，界面无法再向下滚动到键盘top的位置

#import "TSCVCCustomerWantBuyC.h"
#import "TSCSDK.h"


@implementation TSCVCCustomerWantBuyC {
    
    // 情况1：iGuideId、iUnsyncWantBuyId均为0：新建求购。既不指定导购、也不是读取某个未同步的求购
    // 情况2：iGuideId不为0、iUnsyncWantBuyId为0：指定导购。清空以前的草稿箱，将此次求购作为新的草稿
    // 情况3：iGuideId为0，iUnsyncWantBuyId不为0：读取某个未同步server的草稿
    NSInteger _iGuideId;// 指定导购的id，可能为0。如果为0，则表示不指定导购；如果不为0，表示从某一个指定的导购处购买，则需要清空原来的草稿
    NSInteger _iUnsyncBizId; // 待重新发送的未同步记录的Id，可能为0。如果为0，则表示是新增的求购；如果不为0，则表示还未同步到server的草稿在APP_DB的id
    
    NSInteger _userId;
    NSString * _loginKey;
    
    NSArray<NikiRadioButton *> * _rbgScope; // 保存“发送范围”radioButton
    
    NSMutableArray <UIImage *> * _goodsPicImageArr; // 已经拍照/选择的商品图片UIImage数组
    
    NSString * _contentWord; // 中文“字”
}

#pragma mark 校验并获取输入

- (void) getVCInput:(NSNotificationCenter *)notification {
    [super getVCInput:notification];
    
    _iGuideId = [[_inputDic objectForKey:AEKI_GUIDE_ID] integerValue];
    _iUnsyncBizId = [[_inputDic objectForKey:AEKI_UNSYNC_BIZ_ID] integerValue];
    
    NSAssert(_iGuideId == 0 || _iUnsyncBizId == 0, @"%s: %@、%@：至少有一个为零！", __FUNCTION__, AEKI_GUIDE_ID, AEKI_WANT_BUY_ID);
}


+ (id)vcCustomerWantBuyCWithStoryboard {
    UIStoryboard * sb = [UIStoryboard storyboardWithName:UI_STORYBOARD_NAME_MAIN bundle:[NSBundle mainBundle]];
    return [sb instantiateViewControllerWithIdentifier:UI_VC_NAME_CUSTOMER_WANT_BUY_C];
}



- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // == 获得SP
    _userId = [_ud integerForKey:UD_USER_ID];
    _loginKey = [_ud stringForKey:UD_LOGIN_KEY];
    
    // 初始化类属性
    //    _goodsPicImageArr = [NSMutableArray arrayWithCapacity:CONFIG_MAX_PHOTO_PICK_NUM];// TODO
    _goodsPicImageArr = [NSMutableArray array];
    for (NSInteger i = 0; i < CONFIG_MAX_PHOTO_PICK_NUM; i++) {
        //        [_goodsPicImageArr addObject:[NSNull null]];
        [_goodsPicImageArr addObject:[[UIImage alloc]init]];
    }
    
    // 初始化常量
    _contentWord = NSLocalizedString(@"content_word", nil);
    
    // == 初始化各UI元素属性
    // 修改“商品品类*”必输符号颜色：(4,5]
    [TSCMyUIUtil changeLabelColorWithLabel:_lbInputTitleGC color:[UIColor redColor] range:NSMakeRange(4, 1)];
    
    // 修改“商品描述*”必输符号颜色：(4,5]
    [TSCMyUIUtil changeLabelColorWithLabel:_lbInputTitleGoodsDesc color:[UIColor redColor] range:NSMakeRange(4, 1)];
    
    // 初始化可输入的剩余字数
    _lbGoodsDescRwn.text =  [NSString stringWithFormat:@"%li%@", CONFIG_MAX_RWN, _contentWord];
    
    // 初始化“商品描述”hint
    _mtvGoodsDesc.placeholder = NSLocalizedString(@"hint_create_want_buy", nil);
    //    _mtvGoodsDesc.delegate = self; // 单播代理。已废弃，使用多播代理。设置delegate，用来监听字数变化，并同步更新剩余字数提示
    [_mtvGoodsDesc.multicastDelegate addDelegate:self];
    
    // 创建“商品图片”选择器
    [self createUpdGoodsPic];
    
    // 初始化“商品图片”列表
    _llGoodsPicList.hidden = YES; // 暂时隐藏
    for (NSLayoutConstraint * ct in _llGoodsPicList.constraints) { // 取消高度为10的约束（注：亲测，需要后不会引起布局混乱）
        if (ct.firstAttribute == NSLayoutAttributeHeight) {
            ct.active = NO;
        }
    }
    _llGoodsPicList.orientation = LINEAR_LAYOUT_ORIENTATION_HORIZONTAL;
    _llGoodsPicList.distribution = LINEAR_LAYOUT_DISTRIBUTION_FILL_EQUALLY;
    
    // 暂时隐藏图片下的分割线 TODO
    _ivHlsGoodsPic.hidden = YES;
    
    // 设置“发送范围”
    [_rbInCity setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
    [_rbInCity setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];
    [_rbInCountry setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
    [_rbInCountry setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];
    
    _rbgScope = [NSArray arrayWithObjects:_rbInCity, _rbInCountry, nil];
    [_rbInCity setGroupButtons:_rbgScope];
    
    _rbInCity.selected = YES; // 默认选择“同城”
    
    // ==
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



/*
 #pragma mark - Navigation
 
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
 }
 */

#pragma mark 私有方法
- (void) resignAllFirstResponder {
    NSLog(@"TODO : resignAllFirstResponder");
}

/* private */ - (void) createUpdGoodsPic {
    // 创建customView
    // 1 上部
    TSCLinearLayout * llTopPanel = [[TSCLinearLayout alloc]init];
    llTopPanel.orientation = LINEAR_LAYOUT_ORIENTATION_HORIZONTAL; // 水平
    llTopPanel.paddingC2F = 10.0f;
    llTopPanel.paddingC2C = 10.0f;
    
    UIImageView * ivHelp = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"ic_help_96x96.png"]];
    ivHelp.frame = CGRectMake(0, 0, 30, 30); // 仅设置宽高
    [TSCMyUIUtil addVacancyWithW:30 H:60 forView:ivHelp inView:llTopPanel];
    
    UITextView * tvInfo = [[UITextView alloc]init]; // 注：UITextView，只能使文字顶部，无法使文字垂直居中，所以改用UITextField
    //    UITextField * tvInfo = [[UITextField alloc]init]; // 注：因为UITextField只能单行，所以还得使用UITextView
    //    tvInfo.enabled = false;
    tvInfo.font = [TSCMyUIUtil getSystemDefaultFont];
    tvInfo.text = NSLocalizedString(@"content_goods_pic_intro", nil);
    [llTopPanel addSubview:tvInfo];
    
    // 2 中部
    UIImageView * ivLogo = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"ic_sample_goods_pic_320x320.png"]];
    UIView * ivLogoPanel = [[UIView alloc]init];
    [ivLogoPanel addSubview:ivLogo];
    
    // 约束
    // iv
    ivLogo.translatesAutoresizingMaskIntoConstraints = NO;
    [NSLayoutConstraint constraintWithItem:ivLogo attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:ivLogoPanel attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f].active = YES;
    [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[ivLogo(200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(ivLogo)]];
    [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[ivLogo(200)]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(ivLogo)]];
    
    // 3 整体
    TSCLinearLayout * llCustomView = [[TSCLinearLayout alloc]init];
    [llCustomView addSubview:llTopPanel];
    [llCustomView addSubview:ivLogoPanel];
    
    // 创建图片选择器
    _mupdGoodsPic.borderStyle = UITextBorderStyleNone; // 无边框
    _mupdGoodsPic.hasRightDownTriangleIcon = NO; // 没有右侧倒三角
    _mupdGoodsPic.title = NSLocalizedString(@"title_upload_goods_pic", nil);
    _mupdGoodsPic.bodyView = llCustomView;
    _mupdGoodsPic.maxPhotoPickNum = CONFIG_MAX_PHOTO_PICK_NUM; // 最多拍照/选择3张
    _mupdGoodsPic.isShowPickerDialog = ^() {
        NSInteger remainPicNum = CONFIG_MAX_PHOTO_PICK_NUM - [_llGoodsPicList.subviews count];
        if (remainPicNum <= 0) {
            [TSCMyUIUtil popErrWithString:[NSString stringWithFormat:@"%@%li%@", NSLocalizedString(@"err_max_upload_photo_1", nil), CONFIG_MAX_PHOTO_PICK_NUM, NSLocalizedString(@"err_max_upload_photo_2", nil)]];
            return NO;
        } else {
            return YES;
        }
    };
    
    // 注册事件——当拍照完毕，或者从相册选择完毕（支持多选）后
    _mupdGoodsPic.myImagePickerControllerDidCancel = ^(UINavigationController * picker) {
        // 注：系统不会自动关闭，需要手动关闭
        [picker dismissViewControllerAnimated:YES completion:nil];
    };
    _mupdGoodsPic.myImagePickerControllerDidFinishPickingMediaWithInfo = ^(UINavigationController * picker, NSArray * infoArr) {
        
        // 后台处理
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            NSAssert([infoArr count] <= CONFIG_MAX_PHOTO_PICK_NUM, @"[E]%s: 从相册中选择/拍照后返回的数组元素个数（%li）大于限定个数：%li！", __FUNCTION__, [infoArr count], CONFIG_MAX_PHOTO_PICK_NUM);
            
            // 注：最多有3张图片
            //            for (NSDictionary * info in infoArr) { // TODO delete
            for (NSInteger i = 0, max = [infoArr count]; i < max; i++) {
                NSDictionary * info = infoArr[i];
                
                NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
                UIImage *originalImage, *editedImage, *imageToSave;
                
                if (
                    // 系统自带：当返回的相片为此类型时，表示是通过系统自带的拍照功能获得的相片（一张）
                    (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo)
                    ||
                    // ELC：当返回的相片为此类型时，表示是通过ELC从相册中选择的相片（一张，或者多张）
                    [mediaType isEqualToString:ALAssetTypePhoto]
                    ) {
                    editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage];
                    originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
                    
                    if (editedImage) {
                        imageToSave = editedImage;
                    } else {
                        imageToSave = originalImage;
                    }
                    
                    // 回到主线程
                    dispatch_async(dispatch_get_main_queue(), ^{
                        
                        // 将从相册中选择/拍照的UIImage保存起来（以便后续保存草稿）
                        _goodsPicImageArr[CONFIG_MAX_PHOTO_PICK_NUM - max + i] = imageToSave; // 从后向前“覆盖式”保存
                        // TODO 删除图片时，需要重新调整_goodsPicImageArr[]中元素顺序
                        
                        // 显示图片
                        [self disGoodsPic:imageToSave];
                        
                        return;
                    });
                }
            }
        }); // end dispatch
        
        // 注：系统不会自动关闭，需要手动关闭
        [picker dismissViewControllerAnimated:YES completion:nil];
        [_mupdGoodsPic dismiss];
        
    }; // end delegate注册
}

/**
 * 显示商品图片，并注册删除事件。传入的可能是pic_path，也可能是pic_url
 *
 * @param picKey
 *            用来注册删除事件，指定要删除的图片是哪一张
 */
/* private */ - (void) disGoodsPic:
//(int pathOrUrl, final int picKey, final String picPathOrUrl) { // TODO
(UIImage *) image {
    NSAssert(image, @"[E]%s: 显示图片时，UIImage不能为nil！如果是因为本地图片不存在，或者网络图片不可用，应该在调用该方法前检查，并提示用户！", __FUNCTION__);
    
    // 显示“商品图片列表”面板
    _llGoodsPicList.hidden = NO;
    
    // 显示图片下的分割线
    _ivHlsGoodsPic.hidden = NO;
    
    // 从xib中加载view，并设置image
    TSCFragGoodsPicForCreate * fragPic = [TSCFragGoodsPicForCreate loadFromXib];
    fragPic.ivGoodsPic.image = image;
    
    // 计算3个wrapper的平均宽度
    // 注：使用wrapper是因为LinearLayout中如果设置distribution为“等宽”，则UIImageView将被拉伸。为了避免图像变形，在外包裹一层wrapper，再将wrapper加入ll。所以，wrapper的宽带将随图片的数量而变化（最小值为ll.width/3，最大值为ll.width），而其中的图片view（TSCFragGoodsPicForCreate）宽度可以通过约束保持不变
    // 注：图片与wrapper之间的padding由xib中各view与父view之间的padding约束自行控制
    [_llGoodsPicList layoutIfNeeded]; // 保证ll能获得实际宽度
    CGFloat averageW = _llGoodsPicList.frame.size.width / 3;
    CGFloat averageH = averageW + [fragPic getBtnDeletePartHeight]; // 高度 = 平均宽度 + 删除按钮部分的高度
    
    // 创建wrapper，使ll中各wrapper等宽，但wrapper中的子view保持固定宽高
    UIView * wrapper = [[UIView alloc]init];
    wrapper.frame = CGRectMake(0, 0, 0, averageH); // 仅限定高度，宽度由ll自行管理（所有wrapper等宽，最小值为ll.width/3，最大值为ll.width）
    [wrapper addSubview:fragPic];
    [_llGoodsPicList addSubview:wrapper];
    
    // 约束
    // fragPic
    fragPic.translatesAutoresizingMaskIntoConstraints = NO;
    [NSLayoutConstraint constraintWithItem:fragPic attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:averageW].active = YES;
    [NSLayoutConstraint constraintWithItem:fragPic attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:averageH].active = YES;
    [NSLayoutConstraint constraintWithItem:fragPic attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:wrapper attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f].active = YES;
    [NSLayoutConstraint constraintWithItem:fragPic attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:wrapper attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f].active = YES;
    
    
    
    // TODO 在iv保存picPathOrUrl，以便显示放大图片集时计算该iv的index
    //    ivGoodsPic.setTag(picPathOrUrl);
    // 在view保存内存地址字符串，以便显示放大图片集时计算该iv的index
    fragPic.myTag = [NSString stringWithFormat:@"%p", fragPic];
    
    // 注册事件——点击放大图片
    [self registerClickGoodsPic:fragPic.ivGoodsPic image:image];
    // TODO
    //    // 图片在本地存在
    //    if (image) {
    //
    //    }
    //    // 图片在本地不存在，或者图片已损坏
    //    // 注：如果此时草稿/未同步的图片被用户删除了，则无法正确显示、上传。可以添加更为精密的逻辑，来处理这种情况：在用户点击“发送求购”按钮时，
    //    // 检查每一个待上传的图片。如果某张图片在本地不存在了，则跳过不上传，并pop提示用户错误。最后需要向业务服务器提交的SA中会相应的少一张图片，
    //    // 没关系，有几张，就向业务服务器发送几张图片的url
    //    else {
    //        [TSCMyUIUtil popErrWithResourceKey:@"err_img_path"];
    //    }
    
    
    
    
    
    
    // TODO
    // [我要买使用]
    if (_iUnsyncBizId == 0) {
        //        // 注册事件——点击删除
        //        tvDel.setOnClickListener(new OnClickListener() {
        //            @Override
        //            public void onClick(View v) {
        //                new MyDialog.Builder(mContext)
        //                .setContentMsg(
        //                               getString(R.string.title_confirm_delete))
        //                .setPositiveButton(getString(R.string.btn_confirm),
        //                                   new DialogInterface.OnClickListener() {
        //                                       @Override
        //                                       public void onClick(
        //                                                           DialogInterface dialog,
        //                                                           int which) {
        //                                           // 删除图片缩略图
        //                                           mLlGoodsPicList.removeView(newView);
        //                                           // 隐藏图片下的分割线
        //                                           if (mLlGoodsPicList.getChildCount() == 0) {
        //                                               mTvHlsPic
        //                                               .setVisibility(View.GONE);
        //                                           }
        //                                           // 从已保存的图片路径list中删除这张图片
        //                                           mGoodsPicPathOrUrlSA.remove(picKey);
        //                                           dialog.dismiss();
        //                                       }
        //                                   })
        //                .setNegativeButton(getString(R.string.btn_cancel),
        //                                   new DialogInterface.OnClickListener() {
        //                                       @Override
        //                                       public void onClick(
        //                                                           DialogInterface dialog,
        //                                                           int which) {
        //                                           dialog.dismiss();
        //                                       }
        //                                   }).create().show();
        //            }
        //        });
    }
    // [未同步使用]移除删除按钮
    else {
        //        ViewGroup vg = (ViewGroup) newView;
        //        vg.removeView(tvDel);
    }
    
}

#pragma mark “商品描述” delegate
// 注册事件——字数提示
-(void) textViewDidChange:(UITextView *)textView {
    _lbGoodsDescRwn.text = [NSString stringWithFormat:@"%li%@", CONFIG_MAX_RWN - [TSCMyUtil trim:textView.text].length, _contentWord];
}

#pragma mark 按钮点击事件

// 注册事件——点击放大商品图片
- (void) registerClickGoodsPic:(UIView *)view image:(UIImage *)image {
    view.userInteractionEnabled = YES;
    view.myTag = image; // 保存待显示的image
    [view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(registerClickGoodsPic_2:)]];
}
- (void) registerClickGoodsPic_2:(UIGestureRecognizer *) recognizer {
    UIView * view = recognizer.view;
    UIImage * image = (UIImage *)view.myTag;
    
    // 关闭所有“可能”打开的键盘
    [self resignAllFirstResponder];
    
    TSCMyPhotoDialog * photoDialog = [[TSCMyPhotoDialog alloc]initWithViewController:self image:image];
    [photoDialog show];
}

- (IBAction)btnSubmitClicked:(id)sender {
    
    
    
    
}


@end
